<?php



class TricksTypesController extends AppController{
    
    public $uses = array('Sport', 'TricksType');
    
    /**
     *  Action de la page d'édition des tricksTypes
     */
    public function admin_edit(){
        
        $tricksTypes = $this->TricksType->getTricksType('all', array(
            'order' => array('TricksType.name', 'TricksType.multiple')
        ));        
        
        $tricksTypesList = array();
        foreach ($tricksTypes as $tricksType){
            $id = $tricksType['TricksType']['id'];
            $value = $tricksType['TricksType']['multiple'].' '.$tricksType['TricksType']['name'];
            $tricksTypesList[$id] = $value;
        }
        
        $sports = $this->Sport->find('all', array(
            'order' => array(
                'Sport.name'
            ),
            'recursive' => 1,
            'fields' => array('Sport.*')
        ));
        
        
        $this->set('sports', $sports);
        $this->set('tricksTypes', $tricksTypes);
        $this->set('tricksTypesList', $tricksTypesList);
    }
    
    /**
     *  Suppression d'un type de tricks.
     *  TODO : Supprimer les spin associé !
     * @param type $id 
     */
    public function admin_delete($id){
        $data = $this->TricksType->delete($id);
        
        $this->Session->setFlash('La type de trick a été supprimé');
        $this->redirect('admin_edit');
    }

    /**
     * Permet d'ajouter ou d'éditer les types de tricks
     * Si $data['TricksType']['id'] existe, c'est une édition, sinon c'est un ajout
     */
    public function admin_add(){
        if (!empty($this->request->data)){
            $data = $this->request->data;
            
            $edit = !empty($data['TricksType']['id']) ? $data['TricksType']['id'] : null ;
            
            $tricksTypesSpins = $data['TricksTypesSpin']['spin'];
            $tricksTypesSpins = explode(',',$tricksTypesSpins);
            
            if ($r = $this->TricksType->save($data)){
                if ($edit){
                    $msgFlash = "Le type de trick à été sauvegardé";
                }
                else{                    
                    $msgFlash = "Le type de trick à été ajouté";
                }
                $this->Session->setFlash($msgFlash);
                
                $id = $r['TricksType']['id'];
                
                
                // si edition on récupère tout les spins 
                if ($edit){
                    $spins = $this->TricksType->TricksTypesSpin->find('list', array(
                        'conditions' => array(
                            'tricks_types_id' => $id
                        ),
                        'recursive' => -1,
                        'fields' => array('spin','id')
                    ));
                }
                
                
                foreach ($tricksTypesSpins as $tricksTypesSpin){
                    /**
                     * Si c'est de l'édition, on regarde si le spin n'est pas déja enregistré
                     */
                    if ($edit){
                        $addSpin = empty($spins[$tricksTypesSpin]);
                        if (!empty($spins[$tricksTypesSpin]))
                            unset($spins[$tricksTypesSpin]);
                    }
                    else{
                        $addSpin = true;
                    }
                    
                    
                    if ($addSpin ){                    
                        $this->TricksType->TricksTypesSpin->save(array(
                            'tricks_types_id' => $id,
                            'spin' => $tricksTypesSpin
                        ));
                    }
                    $this->TricksType->TricksTypesSpin->id = null;
                }
                
                if ($edit){
                    // si édition suppression des spin qui reste
                    foreach ($spins as $spinId){
                        $this->TricksType->TricksTypesSpin->delete($spinId);
                    }
                }
            }
            else{
                $this->Session->setFlash("Le type de trick n'a pu être ajouté, essayez plus tard");                
            }
        }
        $this->redirect('admin_edit');
        $this->render(false);
    }
}
?>
